package com.chinairi.mall.service;

import com.chinairi.mall.controller.viewobject.*;
import com.chinairi.mall.model.ManagerInfo;
import com.chinairi.mall.model.OrderInfo;
import com.chinairi.mall.model.Project;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chinairi.mall.service.modelobject.*;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 项目表 服务类
 * </p>
 *
 * @author gsl
 * @since 2020-08-23
 */
public interface IProjectService extends IService<Project> {

    /**
     * 新增项目
     *
     * @param projectVO
     * @throws IOException
     */
    void addProject(ProjectVO projectVO);

    /**
     * 将某个项目添加进项目服务中心
     *
     * @param projectVO
     */
    void addService(ProjectVO projectVO);

    /**
     * 更新
     *
     * @param projectVO
     */
    void updateProject(ProjectVO projectVO);

    /**
     * 删除项目
     * 同时删除子项目
     *
     * @param pId
     */
    void deleteProject(String pId);

    /**
     * 根据条件查询项目
     *
     * @param projectVO
     * @return
     */
    List<Project> selectProject(ProjectVO projectVO);

    /**
     * 获取企业下项目列表
     *
     * @return
     */
    List<ProjectVO> getList(ProjectVO projectVO);

    /**
     * 获取库点
     *
     * @return
     */
    List<StorageAddressVO> getStorage();

    /**
     * 获取所有企业的项目信息
     *
     * @param projectInfoOfAllCompMo
     * @return
     */
    List<ProjectInfoOfAllCompMO> getProjectInfoOfAllComp(ProjectInfoOfAllCompMO projectInfoOfAllCompMo);

    /**
     * 根据企业名称查找项目及订单数/花费数
     *
     * @param allInfoMo
     * @return
     */
    List<AllInfoMO> getAllInfoOfOrder(AllInfoMO allInfoMo);

    /**
     * 用于订单详情展示
     *
     * @param allInfoOfOrderMo
     * @return
     */
    List<AllInfoOfOrderMO> getAllInfoOfOrder(AllInfoOfOrderMO allInfoOfOrderMo);

    /**
     * 获取某个订单下的实物商品
     *
     * @param goodsInfoOfOrderMo
     * @return
     */
    List<GoodsInfoOfOrderMO> getGoodsInfoOfOrder(GoodsInfoOfOrderMO goodsInfoOfOrderMo);

    /**
     * 获取某个物料的生产信息
     *
     * @param productionInfoOfOrderMo
     * @return
     */
    List<ProductionInfoOfOrderMO> getProductionInfoOfOrder(ProductionInfoOfOrderMO productionInfoOfOrderMo);

    /**
     * 根据订单id获取该订单的商品信息
     *
     * @param orderId
     * @return
     */
    OrderInforGoodsVO getGoodsByOrderId(String orderId);

    /**
     * 获取列表
     *
     * @param orderId
     * @return
     */
    List<OrderGoodsVO> getGoodsListByOrderId(String orderId);

    /**
     * 查看企业下所有项目，服务信息
     * @param uciDbId 企业id
     * @return AllProjectInfoOfCompany
     */
    AllProjectInfoOfCompany getAllProjectInfoOfCompany(String uciDbId);

    /**
     * 查看项目下所有订单信息
     * @param pid 项目id
     * @param state 订单状态 0-未完成订单 1-已完成订单
     * @return 所有订单信息
     */
    List<OrderInfo> getAllOrderInfoOfProject(String pid,String state);
    /**
     * 查看项目下所有需求计划信息
     * @param pid 项目id
     * @param state 需求计划状态 0-未完成需求计划 1-已完成需求计划
     * @return 所有需求计划信息
     */
    List<ProjectPlanReqDetailMO> getAllPlanReqDetailInfoOfProject(String pid, String state);

    /**
     * 根据项目id和工序查看物料清单
     * @param pid 项目id
     * @param planProcess 工序 0-完井 1-一开 2-二开 3-三开 4-四开 5-五开
     */
    List<ProjectPlanReqDetailMO> getAllInfoOfBOM(String pid, String planProcess);

    /**
     * 查询项目井别信息
     * @param pid 项目id
     */
    Project getWellInfo(String pid);

    /**
     * 获取所有工序对应的需求物资数和到货物资数
     * @param pid 项目id
     * @return
     */
    List<ReqMatNumber> getReqMatNumber(String pid);

    /**
     * 查看所有企业信息
     * @return 所有企业信息
     */
    AllCompanyInfoVO getAllCompanyInfo();

    /**
     * 根据项目id查询项目下所有需求计划信息
     *
     * @param pid   项目id
     */
    ProjectPlanReqInfoVO getAllPlanReqInfoOfProject(String pid);

    OrderInfoOfPro getOrderInfoOfProject(String pid, String state);

    /**
     * 领导驾驶舱数据展示
     * @return info
     */
    ManagerInfo getManagerInfo();
}
